package com.example.HL7.v24.segment;

import ca.uhn.hl7v2.HL7Exception;
import ca.uhn.hl7v2.model.AbstractSegment;
import ca.uhn.hl7v2.model.Group;
import ca.uhn.hl7v2.model.Type;
import ca.uhn.hl7v2.model.v24.datatype.NM;
import ca.uhn.hl7v2.model.v24.datatype.ST;
import ca.uhn.hl7v2.model.v25.datatype.DTM;
import ca.uhn.hl7v2.parser.ModelClassFactory;

/**
 * @author luzihao
 * @date 2021/3/17 11:11 上午
 * @Description 自定义段，需继承
 */
public class ZDS extends AbstractSegment {

    public ZDS(Group parent, ModelClassFactory factory) {
        super(parent, factory);
        //自定义初始化
        init();
    }

    private void init() {
        try {
            //1.数字，可以为空，不限制最大重复次数（0为不限制），长度50，名字是 room_number
            add(NM.class, false, 0, 50, new Object[]{getMessage()}, "room_number");
            //2.字符串，不可为空，最大重复次数为2，长度200，名字是 dept_name
            add(ST.class, true, 2, 200, new Object[]{getMessage()}, "dept_name");
            //3.日期，名字是 into_time
            add(DTM.class, true, 1, 200, new Object[]{getMessage()}, "into_time");
        } catch (HL7Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 此方法必须被覆盖。最简单的方法就是返回null。(网上资料看到的)
     * @param field
     * @return
     */
    @Override
    protected Type createNewTypeWithoutReflection(int field) {
        return null;
    }

    /**
     * 获取病房号，第一个字段
     * @return
     */
    public NM getRoomNumber() {
        //取第一个字段，和初始化的顺序一样，下面的就省略了
        return getTypedField(1, 0);
    }

    /**
     * 获取科室名称，第二个字段
     * @return
     */
    public ST getDeptName() {
        return getTypedField(2, 0);
    }

    /**
     * 获取住院时间，第三个字段
     * @return
     */
    public DTM getIntoTime() {
        return getTypedField(3, 0);
    }
}
